/**
 * @NoticeHoldProxy.as
 * 
 * @author sodaChen mail:asframe@163.com
 * @version 1.0
 * <br>Copyright (C), 2010 asFrame.com
 * <br>This program is protected by copyright laws.
 * <br>Program Name:AStruts2
 * <br>Date:2012-4-6
 */
package com.asframe.astruts2.proxy
{
	import com.asframe.astruts2.context.IAStrutsContext;
	import com.asframe.astruts2.interfaces.INoticeFilter;
	
	/**
	 * 通知拦截代理对象。所有非实现INoticeFilter接口的拦截器，都是转换成该代理。拦截器默认是会执行doFilter方法
	 * @author sodaChen
	 * @Date:2012-4-6
	 */
	public class NoticeHoldProxy implements INoticeFilter
	{
		/** 代理对象 **/
		private var proxyObj:Object;
		/**
		 * 通知拦截器代理 
		 * @param proxyObj 代理对象
		 * 
		 */		
		public function NoticeHoldProxy(proxyObj:Object)
		{
			this.proxyObj = proxyObj;
			//进行处理
		}
		
		public function getNotices():Array
		{
			return [];
		}
		
		public function doFilter(notice:*, args:Array, context:IAStrutsContext):Boolean
		{
			if(proxyObj.hasOwnProperty("doFilter"))
			{
				return proxyObj.doFilter(notice,args,context);
			}
			//根据相关的元数据进行动态的方法调用
			if(proxyObj.hasOwnProperty(notice))
			{
				try
				{
					//直接进行方法的反射调用，有可能是根据元数据标签进行反射调用
					return proxyObj[notice].apply(proxyObj,args);
				}
				catch(error:Error)
				{
					
				}
			}
			return false;
		}
	}
}
